package database;


import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.text.DecimalFormat;
import java.util.ArrayList;

import materiales.Material;

import pincipal.pack.AgregarPresupuesto;
import pincipal.pack.CubicMagic;
import pincipal.pack.MaterialPartida;

import jxl.Sheet;
import jxl.Workbook;



import jxl.format.Orientation;
import jxl.write.*;
import jxl.write.biff.*;



import android.os.Environment;
import android.util.Log;


public abstract class ExportarExcel 
{
	static boolean sdDisponible = false;
	static boolean sdAccesoEscritura = false;

	
	@SuppressWarnings("deprecation")
	static public void exportarPresupuesto(String nombrePresupuesto, ArrayList<String> partidas, ArrayList<String> cantidades, boolean sd, String totalPresupuesto, ArrayList<MaterialPartida> materialesPartida, Double valorUf)
	{
	
		if (sd )
		{
			verificarEstadoDeSD();
			if (sdDisponible && sdAccesoEscritura)
			{
				try
				{
				    File ruta_sd = Environment.getExternalStorageDirectory();
				    
				    
				    File presupuestoExcel = new File(ruta_sd.getAbsolutePath(),nombrePresupuesto + ".xls");
				    WritableWorkbook writableWorkbook = Workbook.createWorkbook(presupuestoExcel);
				    
				    WritableSheet sheet = writableWorkbook.createSheet("Hoja 1", 0);
	  
				    WritableCellFormat formato = new WritableCellFormat();
				    formato.setShrinkToFit(true);
				    formato.setOrientation(Orientation.HORIZONTAL);
				    
				    
				    
				    jxl.write.Label tituloPartida = new jxl.write.Label(0, 0, "Presupuesto: " + nombrePresupuesto);
				    tituloPartida.setCellFormat(formato);
				    
				    sheet.addCell(tituloPartida);
				    jxl.write.Label partidas1 = new jxl.write.Label(0, 1, "Partidas");
				    partidas1.setCellFormat(formato);
				    sheet.addCell(partidas1);
				    jxl.write.Label tituloCantidad = new jxl.write.Label(1, 1, "Cantidad");
				    sheet.addCell(tituloCantidad);
				    jxl.write.Label materiales = new jxl.write.Label(2, 1, "Materiales");
				    sheet.addCell(materiales);
				    jxl.write.Label tituloCostoUnitario = new jxl.write.Label(3, 1, "Unitario UF");
				    sheet.addCell(tituloCostoUnitario);
				    jxl.write.Label tituloCostoEnPartida = new jxl.write.Label(4, 1, "Total Material");
				    sheet.addCell(tituloCostoEnPartida);
				    
				  int columna = 0, fila = 2;
				  for( int i = 0; i < partidas.size(); i++)
				  {
					  jxl.write.Label partida = new jxl.write.Label(columna, fila, partidas.get(i));
					  sheet.addCell(partida);
					  columna = 1;
					  jxl.write.Label cantidad = new jxl.write.Label(columna, fila, cantidades.get(i));
					  sheet.addCell(cantidad);
					  
					  columna = 2;
					  ArrayList<Material> nombresMateriales = materialesPartida.get(i).getMateriales();
					  ArrayList<String> rendimientos = materialesPartida.get(i).getRendimientos();
					  for ( int j = 0; j < nombresMateriales.size(); j++)
					  {
						  jxl.write.Label nombreMaterial = new jxl.write.Label(columna, fila, nombresMateriales.get(j).getNombre());
						  jxl.write.Label costoUnitario = new jxl.write.Label(columna+1, fila, nombresMateriales.get(j).getPrecio());
						  jxl.write.Label costoEnPartida = new jxl.write.Label(columna+2, fila, parsearMaterialPartida(nombresMateriales.get(j).getPrecio(), rendimientos.get(j), cantidades.get(i), valorUf));
						  sheet.addCell(nombreMaterial);
						  sheet.addCell(costoUnitario);
						  sheet.addCell(costoEnPartida);
						  fila++;
					  }

					  columna = 0;
					  fila++;
				  }

				  fila++;
				  jxl.write.Label total = new jxl.write.Label(0, fila, "Total $: " + totalPresupuesto);
				  sheet.addCell(total);
				  writableWorkbook.write();
				  writableWorkbook.close();
				  
				}
				catch (Exception ex)
				{
				    Log.e("Ficheros", "Error al escribir fichero a tarjeta SD");
				}
			}
				
			
		}

	}
	
	private static void verificarEstadoDeSD()
	{
		String estado = Environment.getExternalStorageState();
		 
		if (estado.equals(Environment.MEDIA_MOUNTED))
		{
		    sdDisponible = true;
		    sdAccesoEscritura = true;
		}
		else if (estado.equals(Environment.MEDIA_MOUNTED_READ_ONLY))
		{
		    sdDisponible = true;
		    sdAccesoEscritura = false;
		}
		else
		{
		    sdDisponible = false;
		    sdAccesoEscritura = false;
		}
	
	}
	
	private static String parsearMaterialPartida(String costo, String rendimiento, String cantidad, Double valorUf)
	{
		DecimalFormat df = new DecimalFormat("0.00");
		double cantidad1 = Double.parseDouble(cantidad);
		double costo1 = Double.parseDouble(costo);
		costo1 = costo1*valorUf;
		
		double rendimiento1 = Double.parseDouble(rendimiento);
		double result = costo1*rendimiento1*cantidad1;
		return String.valueOf(df.format(result));
		
	}
	


}